D:\a\scloud-dns\scloud-dns\src\exceptions\mod.rs
Line | Count | Source |
1 | | use crate::dns::q_class::DNSClass; |
2 | | use strum_macros::EnumIter; |
3 | | |
4 | | mod tests; |
5 | | |
6 | | #[repr(u16)] |
7 | | #[allow(non_camel_case_types)] |
8 | | #[derive(Debug, PartialEq, EnumIter, Clone)] |
9 | | pub enum SCloudException { |
10 | | // HEADER SECTION |
11 | | SCLOUD_HEADER_DESERIALIZATION_FAILED = 0, |
12 | | SCLOUD_HEADER_BYTES_EMPTY = 1, |
13 | | |
14 | | // QUESTION SECTION |
15 | | SCLOUD_QUESTION_DESERIALIZATION_FAILED = 2, |
16 | | SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG = 3, |
17 | | |
18 | | // ANSWER SECTION |
19 | | SCLOUD_ANSWER_DESERIALIZATION_FAILED = 4, |
20 | | SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG = 5, |
21 | | SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT = 6, |
22 | | SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS = 7, |
23 | | |
24 | | // AUTHORITY SECTION |
25 | | SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS = 8, |
26 | | SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT = 9, |
27 | | |
28 | | // ADDITIONAL SECTION |
29 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED = 10, |
30 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT = 11, |
31 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG = 12, |
32 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS = 13, |
33 | | |
34 | | // QNAME |
35 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME = 14, |
36 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF = 15, |
37 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF = 16, |
38 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED = 17, |
39 | | |
40 | | // QTYPE |
41 | | SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN = 18, |
42 | | SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN = 77, |
43 | | |
44 | | //QCLASS |
45 | | SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN = 19, |
46 | | SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN = 20, |
47 | | |
48 | | // STUB RESOLVER |
49 | | SCLOUD_STUB_RESOLVER_INVALID_DNS_ID = 21, |
50 | | SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE = 22, |
51 | | SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET = 23, |
52 | | SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT = 24, |
53 | | SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET = 25, |
54 | | SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET = 26, |
55 | | |
56 | | // RESOLVER |
57 | | SCLOUD_RESOLVER_RESPONSE_MISMATCH = 27, |
58 | | SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE = 28, |
59 | | SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH = 29, |
60 | | SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH = 30, |
61 | | SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH = 31, |
62 | | |
63 | | // ZONES |
64 | | SCLOUD_ZONE_PARSER_FILE_NOT_FOUND = 32, |
65 | | SCLOUD_ZONE_PARSER_FILE_EMPTY = 33, |
66 | | SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE = 34, |
67 | | SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD = 35, |
68 | | |
69 | | // CONFIG |
70 | | SCLOUD_CONFIG_FILE_NOT_FOUND = 36, |
71 | | SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON = 37, |
72 | | SCLOUD_CONFIG_MISSING_FORWARDER = 38, |
73 | | SCLOUD_CONFIG_MISSING_ADDRESS = 39, |
74 | | SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR = 40, |
75 | | SCLOUD_CONFIG_INVALID_SERVER_PORT = 41, |
76 | | SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD = 42, |
77 | | SCLOUD_CONFIG_INVALID_DNS_LIMITS = 43, |
78 | | SCLOUD_CONFIG_INVALID_LISTENER = 44, |
79 | | SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME = 45, |
80 | | SCLOUD_CONFIG_INVALID_LISTENER_PORT = 46, |
81 | | SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS = 47, |
82 | | SCLOUD_CONFIG_TLS_MISSING_CERT = 48, |
83 | | SCLOUD_CONFIG_TLS_MISSING_KEY = 49, |
84 | | SCLOUD_CONFIG_TLS_REQUIRES_TCP = 50, |
85 | | SCLOUD_CONFIG_INVALID_DOH = 51, |
86 | | SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE = 52, |
87 | | SCLOUD_CONFIG_INVALID_FORWARDER = 53, |
88 | | SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME = 54, |
89 | | SCLOUD_CONFIG_INVALID_ZONE = 55, |
90 | | SCLOUD_CONFIG_DUPLICATE_ZONE_NAME = 56, |
91 | | SCLOUD_CONFIG_ZONE_MISSING_FILE = 57, |
92 | | SCLOUD_CONFIG_SLAVE_MISSING_MASTERS = 58, |
93 | | SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS = 59, |
94 | | SCLOUD_CONFIG_INVALID_INLINE_ZONE = 60, |
95 | | SCLOUD_CONFIG_UNKNOWN_TSIG_KEY = 61, |
96 | | SCLOUD_CONFIG_MX_MISSING_PRIORITY = 62, |
97 | | SCLOUD_CONFIG_PRIORITY_ON_NON_MX = 63, |
98 | | SCLOUD_CONFIG_INVALID_VIEW = 64, |
99 | | SCLOUD_CONFIG_DUPLICATE_VIEW_NAME = 65, |
100 | | SCLOUD_CONFIG_INVALID_DYNUPDATE = 66, |
101 | | SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE = 67, |
102 | | |
103 | | // LOGGING |
104 | | SCLOUD_LOGGING_PATH_CREATION_FAILED = 68, |
105 | | SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED = 69, |
106 | | |
107 | | // WORKER |
108 | | SCLOUD_WORKER_FAILED_TO_SPAWN = 70, |
109 | | SCLOUD_WORKER_TX_NOT_SET = 71, |
110 | | SCLOUD_WORKER_RX_NOT_SET = 72, |
111 | | SCLOUD_WORKER_LISTENER_BIND_FAILED = 73, |
112 | | SCLOUD_WORKER_FAILED_TO_CREATE_DECODER = 74, |
113 | | SCLOUD_WORKER_UNKNOWN_TYPE = 75, |
114 | | SCLOUD_WORKER_SEM_CLOSED = 81, |
115 | | |
116 | | // TCP ACCEPTOR |
117 | | SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED = 78, |
118 | | SCLOUD_WORKER_TCPA_RECV_FAILED = 79, |
119 | | SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED = 80, |
120 | | |
121 | | // LISTENER |
122 | | SCLOUD_WORKER_LISTENER_RECV_FAILED = 76, |
123 | | SCLOUD_WORKER_LISTENER_NO_SOCKET = 82, |
124 | | |
125 | | // DECODER |
126 | | } |
127 | | |
128 | | impl SCloudException { |
129 | | #[allow(unused)] |
130 | 166 | pub(crate) fn to_str(&self) -> &'static str { |
131 | 166 | match self { |
132 | | //HEADER SECTION |
133 | | SCloudException::SCLOUD_HEADER_DESERIALIZATION_FAILED => { |
134 | 2 | "Buffer length is less than header length." |
135 | | } |
136 | | |
137 | 2 | SCloudException::SCLOUD_HEADER_BYTES_EMPTY => "The header is empty.", |
138 | | |
139 | | // QUESTION SECTION |
140 | | SCloudException::SCLOUD_QUESTION_DESERIALIZATION_FAILED => { |
141 | 2 | "Buffer length is less than question section length." |
142 | | } |
143 | | SCloudException::SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG => { |
144 | 2 | "`q_name` too long." |
145 | | } |
146 | | |
147 | | // ANSWER SECTION |
148 | | SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED => { |
149 | 2 | "Buffer length is less than answer section length." |
150 | | } |
151 | | SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG => { |
152 | 2 | "Label too long for DNS." |
153 | | } |
154 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT => { |
155 | 2 | "Failed to parse DNS answer section: not enough bytes for TYPE, CLASS, TTL, and RDLENGTH." |
156 | | } |
157 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS => { |
158 | 2 | "Failed to parse DNS answer section: RDLENGTH exceeds remaining buffer size." |
159 | | } |
160 | | |
161 | | // AUTHORITY SECTION |
162 | | SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => { |
163 | 2 | "Buffer length is less than authority section length." |
164 | | } |
165 | | SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT => { |
166 | 2 | "Impossible to deserialize, `buf.len()` is lower than `pos+10`. (buf too short)" |
167 | | } |
168 | | |
169 | | // ADDITIONAL SECTION |
170 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED => { |
171 | 2 | "Buffer length is less than additional section length." |
172 | | } |
173 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT => { |
174 | 2 | "Impossible to deserialize, `buf.len()` is lower than `pos+10`. (buf too short)" |
175 | | } |
176 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG => { |
177 | 2 | "`q_name` too long." |
178 | | } |
179 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => { |
180 | 2 | "Buffer length is less than authority section length." |
181 | | } |
182 | | |
183 | | // QNAME |
184 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME => { |
185 | 2 | "Impossible to parse the `q_name`, check if a `q_name` is provided." |
186 | | } |
187 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF => { |
188 | 2 | "Impossible to parse the `q_name`, pos is greater than buffer length." |
189 | | } |
190 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF => { |
191 | 2 | "Impossible to parse the `q_name`, pos and len are greater than buffer length." |
192 | | } |
193 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED => { |
194 | 2 | "Impossible to parse the `q_name`, compression 0xC0xx failed." |
195 | | } |
196 | | |
197 | | // QTYPE |
198 | | SCloudException::SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN => { |
199 | 2 | "Unknown `q_type`, failed to find a DNSRecordType for a u16." |
200 | | } |
201 | | SCloudException::SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN => { |
202 | 2 | "Unknown `q_type`, failed to find a u16 for a DNSRecordType." |
203 | | } |
204 | | |
205 | | //QCLASS |
206 | | SCloudException::SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN => { |
207 | 2 | "Unknown `q_class`, failed to find a DNSClass for a u16." |
208 | | } |
209 | | SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN => { |
210 | 2 | "Unknown `q_class`, failed to find a u16 for a DNSClass." |
211 | | } |
212 | | |
213 | | // STUB RESOLVER |
214 | | SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_ID => { |
215 | 2 | "Invalid DNS ID (difference between `response.header.id` and `request_id`)." |
216 | | } |
217 | 2 | SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE => "Invalid DNS response.", |
218 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET => { |
219 | 2 | "Failed to create UDP socket." |
220 | | } |
221 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT => { |
222 | 2 | "Failed to read, socket timeout." |
223 | | } |
224 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET => { |
225 | 2 | "Failed to send to socket." |
226 | | } |
227 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET => { |
228 | 2 | "Failed to receive from socket." |
229 | | } |
230 | | |
231 | | // RESOLVER |
232 | | SCloudException::SCLOUD_RESOLVER_RESPONSE_MISMATCH => { |
233 | 2 | "DNS response failed validation against the original query." |
234 | | } |
235 | 2 | SCloudException::SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE => "Record out of zone.", |
236 | | SCloudException::SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH => { |
237 | 2 | "`AnswerSection.q_name` is not the same as `QuestionSection.q_name`" |
238 | | } |
239 | | SCloudException::SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH => { |
240 | 2 | "`AuthoritySection.q_name` is not the same as `QuestionSection.q_name`" |
241 | | } |
242 | | SCloudException::SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH => { |
243 | 2 | "`AdditionnalSection.q_name` is not the same as `QuestionSection.q_name`" |
244 | | } |
245 | | |
246 | | // ZONES |
247 | 2 | SCloudException::SCLOUD_ZONE_PARSER_FILE_NOT_FOUND => "Zone file not found.", |
248 | 2 | SCloudException::SCLOUD_ZONE_PARSER_FILE_EMPTY => "Zone file is empty.", |
249 | | SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE => { |
250 | 2 | "`zone_parser()` failed to read the zone file." |
251 | | } |
252 | | SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD => { |
253 | 2 | "`zone_parser()` detect TTL field but failed to read this field." |
254 | | } |
255 | | |
256 | | //CONFIG |
257 | 2 | SCloudException::SCLOUD_CONFIG_FILE_NOT_FOUND => "Configuration file not found.", |
258 | | SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON => { |
259 | 2 | "Error while parsing the JSON file." |
260 | | } |
261 | 2 | SCloudException::SCLOUD_CONFIG_MISSING_FORWARDER => "Missing forwarder.", |
262 | 2 | SCloudException::SCLOUD_CONFIG_MISSING_ADDRESS => "Missing address.", |
263 | | SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR => { |
264 | 2 | "Error while parsing the IP address." |
265 | | } |
266 | | SCloudException::SCLOUD_CONFIG_INVALID_SERVER_PORT => { |
267 | 2 | "Invalid server port (must be between 1 and 65535)." |
268 | | } |
269 | | SCloudException::SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD => { |
270 | 2 | "Invalid max UDP payload size." |
271 | | } |
272 | | SCloudException::SCLOUD_CONFIG_INVALID_DNS_LIMITS => { |
273 | 2 | "Invalid DNS limits (label length, domain length, or packet size)." |
274 | | } |
275 | 2 | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER => "Invalid listener configuration.", |
276 | | SCloudException::SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME => { |
277 | 2 | "Duplicate listener name detected." |
278 | | } |
279 | 2 | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PORT => "Invalid listener port.", |
280 | | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS => { |
281 | 2 | "Listener has no valid protocol defined." |
282 | | } |
283 | | SCloudException::SCLOUD_CONFIG_TLS_MISSING_CERT => { |
284 | 2 | "TLS enabled but certificate path is missing." |
285 | | } |
286 | | SCloudException::SCLOUD_CONFIG_TLS_MISSING_KEY => { |
287 | 2 | "TLS enabled but private key path is missing." |
288 | | } |
289 | 2 | SCloudException::SCLOUD_CONFIG_TLS_REQUIRES_TCP => "TLS listeners require TCP support.", |
290 | | SCloudException::SCLOUD_CONFIG_INVALID_DOH => { |
291 | 2 | "Invalid DNS-over-HTTPS (DoH) configuration." |
292 | | } |
293 | | SCloudException::SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE => { |
294 | 2 | "Unknown or invalid ACL reference." |
295 | | } |
296 | 2 | SCloudException::SCLOUD_CONFIG_INVALID_FORWARDER => "Invalid forwarder configuration.", |
297 | | SCloudException::SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME => { |
298 | 2 | "Duplicate forwarder name detected." |
299 | | } |
300 | 2 | SCloudException::SCLOUD_CONFIG_INVALID_ZONE => "Invalid DNS zone configuration.", |
301 | 2 | SCloudException::SCLOUD_CONFIG_DUPLICATE_ZONE_NAME => "Duplicate zone name detected.", |
302 | 2 | SCloudException::SCLOUD_CONFIG_ZONE_MISSING_FILE => "Zone file path is missing.", |
303 | | SCloudException::SCLOUD_CONFIG_SLAVE_MISSING_MASTERS => { |
304 | 2 | "Slave zone has no master servers defined." |
305 | | } |
306 | | SCloudException::SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS => { |
307 | 2 | "Forward zone has no forwarders defined." |
308 | | } |
309 | | SCloudException::SCLOUD_CONFIG_INVALID_INLINE_ZONE => { |
310 | 2 | "Inline zone is invalid (missing records or SOA)." |
311 | | } |
312 | | SCloudException::SCLOUD_CONFIG_UNKNOWN_TSIG_KEY => { |
313 | 2 | "Referenced TSIG key does not exist." |
314 | | } |
315 | | SCloudException::SCLOUD_CONFIG_MX_MISSING_PRIORITY => { |
316 | 2 | "MX record is missing priority field." |
317 | | } |
318 | | SCloudException::SCLOUD_CONFIG_PRIORITY_ON_NON_MX => { |
319 | 2 | "Priority field is only allowed on MX records." |
320 | | } |
321 | 2 | SCloudException::SCLOUD_CONFIG_INVALID_VIEW => "Invalid DNS view configuration.", |
322 | 2 | SCloudException::SCLOUD_CONFIG_DUPLICATE_VIEW_NAME => "Duplicate view name detected.", |
323 | | SCloudException::SCLOUD_CONFIG_INVALID_DYNUPDATE => { |
324 | 2 | "Invalid dynamic update configuration." |
325 | | } |
326 | | SCloudException::SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE => { |
327 | 2 | "Dynamic update references an unknown zone." |
328 | | } |
329 | | |
330 | | // LOGGING |
331 | 2 | SCloudException::SCLOUD_LOGGING_PATH_CREATION_FAILED => "Logging path creation failed.", |
332 | | SCloudException::SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED => { |
333 | 2 | "Log file creation/opening failed." |
334 | | } |
335 | | |
336 | | // WORKER |
337 | | SCloudException::SCLOUD_WORKER_FAILED_TO_SPAWN => { |
338 | 2 | "Failed to link the worker to the thread, and cannot spawn a worker." |
339 | | } |
340 | 2 | SCloudException::SCLOUD_WORKER_TX_NOT_SET => "`dns_tx` is not set for this worker.", |
341 | 2 | SCloudException::SCLOUD_WORKER_RX_NOT_SET => "`dns_rx` is not set for this worker.", |
342 | | SCloudException::SCLOUD_WORKER_LISTENER_BIND_FAILED => { |
343 | 2 | "Listener bind just failed at 'threads::run(&self)'." |
344 | | } |
345 | | SCloudException::SCLOUD_WORKER_FAILED_TO_CREATE_DECODER => { |
346 | 2 | "Failed to create a decoding worker." |
347 | | } |
348 | 2 | SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE => "Unknown worker type.", |
349 | | SCloudException::SCLOUD_WORKER_SEM_CLOSED => { |
350 | 2 | "Failed to .acquire_owned(), because the Semaphore is closed." |
351 | | } |
352 | | |
353 | | // TCP ACCEPTOR |
354 | | SCloudException::SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED => { |
355 | 2 | "Impossible to create a TCP_ACCEPTOR worker, socket creation failed." |
356 | | } |
357 | | SCloudException::SCLOUD_WORKER_TCPA_RECV_FAILED => { |
358 | 2 | "TCP_ACCEPTOR recv() failed." |
359 | | } |
360 | | SCloudException::SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED => { |
361 | 2 | "Impossible to bind TCP_ACCEPTOR socket, most probable cause: another worker is already using this port." |
362 | | } |
363 | | |
364 | | // LISTENER |
365 | 2 | SCloudException::SCLOUD_WORKER_LISTENER_RECV_FAILED => "Listener recv() failed.", |
366 | | SCloudException::SCLOUD_WORKER_LISTENER_NO_SOCKET => { |
367 | 2 | "LISTENER worker spawned directly — use TCP_ACCEPTOR instead." |
368 | | } |
369 | 0 | _ => "Unknown error.", |
370 | | } |
371 | 166 | } |
372 | | } |
373 | | |
374 | | impl TryFrom<u16> for SCloudException { |
375 | | type Error = SCloudException; |
376 | | |
377 | 238 | fn try_from(v: u16) -> Result<Self, Self::Error> { |
378 | 238 | match v { |
379 | | //HEADER SECTION |
380 | 3 | 0 => Ok(SCloudException::SCLOUD_HEADER_DESERIALIZATION_FAILED), |
381 | 3 | 1 => Ok(SCloudException::SCLOUD_HEADER_BYTES_EMPTY), |
382 | | |
383 | | // QUESTION SECTION |
384 | 3 | 2 => Ok(SCloudException::SCLOUD_QUESTION_DESERIALIZATION_FAILED), |
385 | 3 | 3 => Ok(SCloudException::SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG), |
386 | | |
387 | | // ANSWER SECTION |
388 | 3 | 4 => Ok(SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED), |
389 | 3 | 5 => Ok(SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG), |
390 | 3 | 6 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT), |
391 | 3 | 7 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS), |
392 | | |
393 | | // AUTHORITY SECTION |
394 | 3 | 8 => Ok(SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS), |
395 | 3 | 9 => Ok(SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT), |
396 | | |
397 | | // ADDITIONAL SECTION |
398 | 3 | 10 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED), |
399 | 3 | 11 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT), |
400 | 3 | 12 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG), |
401 | 3 | 13 => Ok(SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS), |
402 | | |
403 | | // QNAME SECTION |
404 | 3 | 14 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME), |
405 | 3 | 15 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF), |
406 | 3 | 16 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF), |
407 | 3 | 17 => Ok(SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED), |
408 | | |
409 | | // ANSWER SECTION |
410 | 3 | 18 => Ok(SCloudException::SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN), |
411 | 3 | 77 => Ok(SCloudException::SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN), |
412 | | |
413 | 3 | 19 => Ok(SCloudException::SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN), |
414 | 3 | 20 => Ok(SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN), |
415 | | |
416 | 3 | 21 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_ID), |
417 | 3 | 22 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE), |
418 | 3 | 23 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET), |
419 | 3 | 24 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT), |
420 | 3 | 25 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET), |
421 | 3 | 26 => Ok(SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET), |
422 | 3 | 27 => Ok(SCloudException::SCLOUD_RESOLVER_RESPONSE_MISMATCH), |
423 | 3 | 28 => Ok(SCloudException::SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE), |
424 | 3 | 29 => Ok(SCloudException::SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH), |
425 | 3 | 30 => Ok(SCloudException::SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH), |
426 | 3 | 31 => Ok(SCloudException::SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH), |
427 | 3 | 32 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FILE_NOT_FOUND), |
428 | 3 | 33 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FILE_EMPTY), |
429 | 3 | 34 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE), |
430 | 3 | 35 => Ok(SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD), |
431 | 3 | 36 => Ok(SCloudException::SCLOUD_CONFIG_FILE_NOT_FOUND), |
432 | 3 | 37 => Ok(SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON), |
433 | 3 | 38 => Ok(SCloudException::SCLOUD_CONFIG_MISSING_FORWARDER), |
434 | 3 | 39 => Ok(SCloudException::SCLOUD_CONFIG_MISSING_ADDRESS), |
435 | 3 | 40 => Ok(SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR), |
436 | 3 | 41 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_SERVER_PORT), |
437 | 3 | 42 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD), |
438 | 3 | 43 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_DNS_LIMITS), |
439 | 3 | 44 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_LISTENER), |
440 | 3 | 45 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME), |
441 | 3 | 46 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PORT), |
442 | 3 | 47 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS), |
443 | 3 | 48 => Ok(SCloudException::SCLOUD_CONFIG_TLS_MISSING_CERT), |
444 | 3 | 49 => Ok(SCloudException::SCLOUD_CONFIG_TLS_MISSING_KEY), |
445 | 3 | 50 => Ok(SCloudException::SCLOUD_CONFIG_TLS_REQUIRES_TCP), |
446 | 3 | 51 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_DOH), |
447 | 3 | 52 => Ok(SCloudException::SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE), |
448 | 3 | 53 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_FORWARDER), |
449 | 3 | 54 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME), |
450 | 3 | 55 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_ZONE), |
451 | 3 | 56 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_ZONE_NAME), |
452 | 3 | 57 => Ok(SCloudException::SCLOUD_CONFIG_ZONE_MISSING_FILE), |
453 | 3 | 58 => Ok(SCloudException::SCLOUD_CONFIG_SLAVE_MISSING_MASTERS), |
454 | 3 | 59 => Ok(SCloudException::SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS), |
455 | 3 | 60 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_INLINE_ZONE), |
456 | 3 | 61 => Ok(SCloudException::SCLOUD_CONFIG_UNKNOWN_TSIG_KEY), |
457 | 3 | 62 => Ok(SCloudException::SCLOUD_CONFIG_MX_MISSING_PRIORITY), |
458 | 3 | 63 => Ok(SCloudException::SCLOUD_CONFIG_PRIORITY_ON_NON_MX), |
459 | 3 | 64 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_VIEW), |
460 | 3 | 65 => Ok(SCloudException::SCLOUD_CONFIG_DUPLICATE_VIEW_NAME), |
461 | 3 | 66 => Ok(SCloudException::SCLOUD_CONFIG_INVALID_DYNUPDATE), |
462 | 3 | 67 => Ok(SCloudException::SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE), |
463 | 3 | 68 => Ok(SCloudException::SCLOUD_LOGGING_PATH_CREATION_FAILED), |
464 | 3 | 69 => Ok(SCloudException::SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED), |
465 | 3 | 70 => Ok(SCloudException::SCLOUD_WORKER_FAILED_TO_SPAWN), |
466 | 3 | 71 => Ok(SCloudException::SCLOUD_WORKER_TX_NOT_SET), |
467 | 3 | 72 => Ok(SCloudException::SCLOUD_WORKER_RX_NOT_SET), |
468 | 3 | 73 => Ok(SCloudException::SCLOUD_WORKER_LISTENER_BIND_FAILED), |
469 | 3 | 74 => Ok(SCloudException::SCLOUD_WORKER_FAILED_TO_CREATE_DECODER), |
470 | 3 | 75 => Ok(SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE), |
471 | 3 | 76 => Ok(SCloudException::SCLOUD_WORKER_LISTENER_RECV_FAILED), |
472 | 0 | 78 => Ok(SCloudException::SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED), |
473 | 0 | 79 => Ok(SCloudException::SCLOUD_WORKER_TCPA_RECV_FAILED), |
474 | 0 | 80 => Ok(SCloudException::SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED), |
475 | 0 | 81 => Ok(SCloudException::SCLOUD_WORKER_SEM_CLOSED), |
476 | 0 | 82 => Ok(SCloudException::SCLOUD_WORKER_LISTENER_NO_SOCKET), |
477 | | |
478 | 4 | _ => Err(SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE), |
479 | | } |
480 | 238 | } |
481 | | } |
482 | | |
483 | | impl TryFrom<SCloudException> for u16 { |
484 | | type Error = SCloudException; |
485 | | |
486 | 234 | fn try_from(c: SCloudException) -> Result<u16, Self::Error> { |
487 | | #[allow(unreachable_patterns)] |
488 | 234 | match c { |
489 | 3 | SCloudException::SCLOUD_HEADER_DESERIALIZATION_FAILED => Ok(0), |
490 | 3 | SCloudException::SCLOUD_HEADER_BYTES_EMPTY => Ok(1), |
491 | 3 | SCloudException::SCLOUD_QUESTION_DESERIALIZATION_FAILED => Ok(2), |
492 | 3 | SCloudException::SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG => Ok(3), |
493 | 3 | SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED => Ok(4), |
494 | 3 | SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG => Ok(5), |
495 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT => Ok(6), |
496 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS => Ok(7), |
497 | 3 | SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => Ok(8), |
498 | 3 | SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT => Ok(9), |
499 | 3 | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED => Ok(10), |
500 | 3 | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT => Ok(11), |
501 | 3 | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG => Ok(12), |
502 | 3 | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => Ok(13), |
503 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME => Ok(14), |
504 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF => Ok(15), |
505 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF => Ok(16), |
506 | 3 | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED => Ok(17), |
507 | 3 | SCloudException::SCLOUD_QTYPE_U16_FOR_DNSRECORDTYPE_UNKNOWN => Ok(18), |
508 | 3 | SCloudException::SCLOUD_QTYPE_DNSRECORDTYPE_FOR_U16_UNKNOWN => Ok(77), |
509 | 3 | SCloudException::SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN => Ok(19), |
510 | 3 | SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN => Ok(20), |
511 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_ID => Ok(21), |
512 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE => Ok(22), |
513 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET => Ok(23), |
514 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT => Ok(24), |
515 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET => Ok(25), |
516 | 3 | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET => Ok(26), |
517 | 3 | SCloudException::SCLOUD_RESOLVER_RESPONSE_MISMATCH => Ok(27), |
518 | 3 | SCloudException::SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE => Ok(28), |
519 | 3 | SCloudException::SCLOUD_RESOLVER_ANSWER_QNAME_MISMATCH => Ok(29), |
520 | 3 | SCloudException::SCLOUD_RESOLVER_AUTHORITY_QNAME_MISMATCH => Ok(30), |
521 | 3 | SCloudException::SCLOUD_RESOLVER_ADDITIONNAL_QNAME_MISMATCH => Ok(31), |
522 | 3 | SCloudException::SCLOUD_ZONE_PARSER_FILE_NOT_FOUND => Ok(32), |
523 | 3 | SCloudException::SCLOUD_ZONE_PARSER_FILE_EMPTY => Ok(33), |
524 | 3 | SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE => Ok(34), |
525 | 3 | SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD => Ok(35), |
526 | 3 | SCloudException::SCLOUD_CONFIG_FILE_NOT_FOUND => Ok(36), |
527 | 3 | SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON => Ok(37), |
528 | 3 | SCloudException::SCLOUD_CONFIG_MISSING_FORWARDER => Ok(38), |
529 | 3 | SCloudException::SCLOUD_CONFIG_MISSING_ADDRESS => Ok(39), |
530 | 3 | SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR => Ok(40), |
531 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_SERVER_PORT => Ok(41), |
532 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD => Ok(42), |
533 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_DNS_LIMITS => Ok(43), |
534 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER => Ok(44), |
535 | 3 | SCloudException::SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME => Ok(45), |
536 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PORT => Ok(46), |
537 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS => Ok(47), |
538 | 3 | SCloudException::SCLOUD_CONFIG_TLS_MISSING_CERT => Ok(48), |
539 | 3 | SCloudException::SCLOUD_CONFIG_TLS_MISSING_KEY => Ok(49), |
540 | 3 | SCloudException::SCLOUD_CONFIG_TLS_REQUIRES_TCP => Ok(50), |
541 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_DOH => Ok(51), |
542 | 3 | SCloudException::SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE => Ok(52), |
543 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_FORWARDER => Ok(53), |
544 | 3 | SCloudException::SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME => Ok(54), |
545 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_ZONE => Ok(55), |
546 | 3 | SCloudException::SCLOUD_CONFIG_DUPLICATE_ZONE_NAME => Ok(56), |
547 | 3 | SCloudException::SCLOUD_CONFIG_ZONE_MISSING_FILE => Ok(57), |
548 | 3 | SCloudException::SCLOUD_CONFIG_SLAVE_MISSING_MASTERS => Ok(58), |
549 | 3 | SCloudException::SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS => Ok(59), |
550 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_INLINE_ZONE => Ok(60), |
551 | 3 | SCloudException::SCLOUD_CONFIG_UNKNOWN_TSIG_KEY => Ok(61), |
552 | 3 | SCloudException::SCLOUD_CONFIG_MX_MISSING_PRIORITY => Ok(62), |
553 | 3 | SCloudException::SCLOUD_CONFIG_PRIORITY_ON_NON_MX => Ok(63), |
554 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_VIEW => Ok(64), |
555 | 3 | SCloudException::SCLOUD_CONFIG_DUPLICATE_VIEW_NAME => Ok(65), |
556 | 3 | SCloudException::SCLOUD_CONFIG_INVALID_DYNUPDATE => Ok(66), |
557 | 3 | SCloudException::SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE => Ok(67), |
558 | 3 | SCloudException::SCLOUD_LOGGING_PATH_CREATION_FAILED => Ok(68), |
559 | 3 | SCloudException::SCLOUD_LOGGING_FILE_CREATION_OR_OPENING_FAILED => Ok(69), |
560 | 3 | SCloudException::SCLOUD_WORKER_FAILED_TO_SPAWN => Ok(70), |
561 | 3 | SCloudException::SCLOUD_WORKER_TX_NOT_SET => Ok(71), |
562 | 3 | SCloudException::SCLOUD_WORKER_RX_NOT_SET => Ok(72), |
563 | 3 | SCloudException::SCLOUD_WORKER_LISTENER_BIND_FAILED => Ok(73), |
564 | 3 | SCloudException::SCLOUD_WORKER_FAILED_TO_CREATE_DECODER => Ok(74), |
565 | 3 | SCloudException::SCLOUD_WORKER_UNKNOWN_TYPE => Ok(75), |
566 | 3 | SCloudException::SCLOUD_WORKER_LISTENER_RECV_FAILED => Ok(76), |
567 | 0 | SCloudException::SCLOUD_WORKER_TCPA_SOCKET_CREATION_FAILED => Ok(78), |
568 | 0 | SCloudException::SCLOUD_WORKER_TCPA_RECV_FAILED => Ok(79), |
569 | 0 | SCloudException::SCLOUD_WORKER_TCPA_SOCKET_BIND_FAILED => Ok(80), |
570 | 0 | SCloudException::SCLOUD_WORKER_SEM_CLOSED => Ok(81), |
571 | 0 | SCloudException::SCLOUD_WORKER_LISTENER_NO_SOCKET => Ok(82), |
572 | 0 | _ => Err(SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN), |
573 | | } |
574 | 234 | } |
575 | | } |